package com.min.common.Login;

import com.min.common.entity.MinReource;
import com.min.common.entity.MinSubject;

import java.util.List;


/**
 * 认证 与 授权 抽象接口
 * <p>
 *     认证 通常需要通过token来获取到登录的主体是谁
 *     授权 通常需要比较主体是否有访问链接的权限
 * </p>
 * @author: fengt
 * @date: 2021/4/12 17:32
 **/
public interface IPerms {

    /**
     * 实现此方法保证系统能通过token找到对应的登录主体信息
     * <p>
     *     token与用户主体{@link com.min.common.entity.MinSubject }一般采用键值对的形式存储在redis等缓存中，认证时根据token去缓存中取出用户主体
     * </p>
     * @param token token字符串
     * @return: com.min.main.config.perms.MinToken
     * @author: fengt
     * @date: 2021/4/9 17:28
     **/
    MinSubject getSubject(String token);

    /**
     * 实现此方法获取系统所有资源
     * <p>
     *     通常从数据库中加载菜单，按钮等资源以及对应需要的角色和权限
     * </p>
     * @return: java.util.List<com.min.common.entity.MinReource>
     * @author: fengt
     * @date: 2021/4/12 17:28
     **/
    List<MinReource> resources();

}
